/*!
 * \file json_comm.h
 *
 * \brief json 数据收集
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 *
 * \version 1.0
 * \author geyh
 * \date 2017/03/02
 *
 */

#ifndef APM_R4_JSON_COMM_H
#define APM_R4_JSON_COMM_H


#include <frbyte_buffer.h>
#include <module_comm.h>

#define JSON_THRIFT             1
#define JSON_OTHER              99

typedef void(*frjson_private_data_free)(void **pp_private_data);

typedef struct __st_thrift_data
{
    int i_seq_id;
    L4_transaction st_l4_trans;                 //L4信息统计
    Frlist_header *p_report_comm;               //用于临时存储report的公共部分数据
    Frlist_header *p_report_req;                //用于临时存储report的请求部分数据
}thrift_data;



typedef struct __st_L7session_json_private
{
    Frbyte_Packet *p_st_data;                   //存bytebuff数据
    L4_transaction st_l4_trans;                 //L4信息统计
    unsigned char uc_start_char;
    unsigned char uc_end_char;
    Frlist_header *p_report_comm;               //用于临时存储report的公共部分数据
    Frlist_header *p_report_req;                //用于临时存储report的请求部分数据
    int i_json_format;
    void *p_private_data;
    frjson_private_data_free pf_free;
    int i_seq_id;

}L7session_json_private;

/*!
 * json数据 request数据解析
 *
 * \param p_st_packet      (协议分析入力数据)
 *        p_st_private     (私有数据)
 *        p_st_conn        (ct信息)
 *        p_st_hash_report (上报信息)
 *
 * \return  FR_SUCC:成功
 *          FR_FAIL:失败
 *
 */
int frjson_req_analyze(Apm_packet *p_st_packet, L7session_json_private *p_st_private
                       , Conntrack *p_st_conn, Frhash_header *p_st_hash_report);
/*!
 * json数据 response数据解析
 *
 * \param p_st_packet      (协议分析入力数据)
 *        p_st_private     (私有数据)
 *        p_st_conn        (ct信息)
 *        p_st_hash_report (上报信息)
 *
 * \return  FR_SUCC:成功
 *          FR_FAIL:失败
 *
 */
int frjson_resp_analyze(Apm_packet *p_st_packet, L7session_json_private *p_st_private
                       , Conntrack *p_st_conn, Frhash_header *p_st_hash_report);

#endif //APM_R4_JSON_COMM_H
